package com.jyw.business.knowledge.domain.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.jyw.common.annotation.Conversion;
import com.jyw.common.constant.SysDictTypeConstant;
import com.jyw.common.enums.ConversionType;
import com.jyw.system.domain.vo.SimpleFileVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.FieldNameConstants;

import java.time.LocalDateTime;
import java.util.List;

/**
 * @author Created by ZhangCheng on 2024/01/15
 */
@Data
@ApiModel("知识库申请查询返回Vo")
@FieldNameConstants
public class KlKnowledgeVo {

    /**
     * 主键
     */
    @ApiModelProperty("主键")
    private Long id;

    /** 标题 */
    @ApiModelProperty("标题")
    private String title;

    /** 助记简拼 */
    @ApiModelProperty("助记简拼")
    private String abbreviation;

    /** 故障分类（数据字典） */
    @ApiModelProperty("故障分类（数据字典）")
    @Conversion(value = ConversionType.DICT,dictType = SysDictTypeConstant.OBS_FAULT_TYPE,name = Fields.faultTypeName)
    private String faultType;

    /** 故障分类名称 */
    @ApiModelProperty("故障分类名称")
    private String faultTypeName;

    /** 故障原因（数据字典） */
    @ApiModelProperty("故障原因（数据字典）")
    @Conversion(value = ConversionType.DICT,dictType = SysDictTypeConstant.OBS_FAULT_CAUSES,name = Fields.faultCausesName)
    private String faultCauses;

    /** 故障原因（数据字典） */
    @ApiModelProperty("故障原因（数据字典）")
    private String faultCausesName;

    /** 症状 */
    @ApiModelProperty("症状")
    private String question;

    /** 解决办法 */
    @ApiModelProperty("解决办法")
    private String answer;

    /** 附件(附件ID集合) */
    @ApiModelProperty("附件(附件ID集合)")
    private String enclosureId;

    /**
     * 附件
     */
    @ApiModelProperty("附件")
    private List<SimpleFileVo> enclosure;

    /** 指定审核用户ID（逗号分隔开） */
    @ApiModelProperty("指定审核用户ID（逗号分隔开）")
    private String reviewUserIds;

    /** 审核状态（数据字典） */
    @ApiModelProperty("审核状态（数据字典）")
    @Conversion(value = ConversionType.DICT,dictType = SysDictTypeConstant.KL_APPLY_STATUS,name = Fields.applyStatusName)
    private String applyStatus;

    /** 审核状态名称 */
    @ApiModelProperty("审核状态名称")
    private String applyStatusName;

    /** 审核用户ID */
    @ApiModelProperty("审核用户ID")
    private Long applyUserId;

    /** 审核时间 */
    @ApiModelProperty("审核时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDateTime applyTime;

    /** 状态(0已禁用1已启用) */
    @ApiModelProperty("状态(0已禁用1已启用)")
    private Integer state;

    /** 驳回原因（数据字典） */
    @ApiModelProperty("驳回原因（数据字典）")
    @Conversion(value = ConversionType.DICT,dictType = SysDictTypeConstant.OBS_NO_EXAMINE,name = Fields.rejectReasonName)
    private String rejectReason;

    /** 驳回原因 */
    @ApiModelProperty("驳回原因")
    private String rejectReasonName;

    /** 说明 */
    @ApiModelProperty("说明")
    private String description;

    /** 创建者（申请人） */
    @ApiModelProperty("创建者（申请人）")
    @Conversion(value = ConversionType.USER,name = Fields.createUserName)
    private Long createUser;

    /** 创建者（申请人） */
    @ApiModelProperty("创建者（申请人）")
    private String createUserName;

    /** 修改时间 */
    @ApiModelProperty("创建时间（申请时间）")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private LocalDateTime createTime;

    /** 修改者 */
    @ApiModelProperty("修改者")
    @Conversion(value = ConversionType.USER,name = Fields.updateUserName)
    private Long updateUser;

    /** 创建者（申请人） */
    @ApiModelProperty("创建者（申请人）")
    private String updateUserName;

    /** 创建时间 */
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private LocalDateTime updateTime;

    /** 是否是申请人 */
    @ApiModelProperty("是否是申请人")
    private Boolean applicant;

    /** 是否是审核人 */
    @ApiModelProperty("是否是审核人")
    private Boolean reviewer;

    @ApiModelProperty("申请人")
    @Conversion(value = ConversionType.USER,name = Fields.submitUserName)
    private Long submitUser;

    @ApiModelProperty("申请人名称")
    private String submitUserName;
}
